home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / Libraries / DCLAP 6d / dclap6d / DBio / DSequence.h < prev    next >
Text File  |  1996-07-05  |  7KB  |  183 lines

  1. // DSequence.h 
  2. // by d.g.gilbert, Oct 1990 -- 1994
  3.  
  4.  
  5. #ifndef __USEQUENCE__
  6. #define __USEQUENCE__
  7.  
  8.  
  9. #include <DObject.h>
  10.             
  11. //typedef    char         SeqName[kNameWidth+1];
  12.  
  13. struct SearchRec {
  14.     long        lim,indx,step;
  15.     char*     targ;
  16.     }; 
  17.  
  18.     
  19. class DFile;
  20.  
  21. class    DSequence : public DObject {
  22. protected:        
  23.     char*             fInfo;                 //sequence documentation 
  24.     char*             fBases;                //the bases
  25.     char*             fMasks;                //style masks
  26.     char*             fName;  
  27.     short             fKind;                //dna/rna/amino/...
  28.     long                 fLength;            //base count
  29.     unsigned long    fChecksum;    //checksum for the bases
  30.     unsigned long    fModTime;        //date/time last modified
  31.     long                 fOrigin;            //offset of start from 0
  32.     long                 fSelStart;        //selection start -- tmp
  33.     long                 fSelBases;        //selection size
  34.     short             fIndex;                //index into SeqList (temp?)
  35.     SearchRec        fSearchRec;
  36.     Boolean         fDeleted:1;        //? Whether the seq has been deleted 
  37.     Boolean         fOpen:1;            //? seq is open in a view
  38.     Boolean         fChanged:1;        //modified since updt
  39.     Boolean            fMasksOk:1;        //if fMasks is in a good state
  40.     Boolean         fIsMega:1;        //object == DMegaSequence
  41.     Boolean            fShowORF:1;        //show ORF mask - only for DAsmView?
  42.     Boolean         fShowRE:1;        //show RE cuts - "
  43.     Boolean            fShowTrace:1;    //show basecall trace - "
  44.     
  45. public:
  46.     static char*  kConsensus;
  47.     static char      indelHard, indelSoft, indelEdge;
  48.     
  49.     enum seqType {
  50.         kDNA             = 1,
  51.         kRNA             = 2,
  52.         kNucleic  = 3, //IUB/IUPAC codes
  53.         kAmino         = 4,
  54.         kOtherSeq    = 5
  55.         };
  56.   enum { kSearchNotFound = -1, kMaskOK = 'K', kMaskEmpty = -1 };
  57.     enum nucBits {
  58.         /* NucleicBits (values in 0..31):  
  59.                 %00001 = A
  60.                 %11000 = kMaskU = U (rna) 
  61.                 %10000 = kMaskIndel = indel (-)
  62.                 %01111 = kMaskNucs = N or .
  63.                 %00000 = non-nucleic */
  64.         kBitA    = 0,  kMaskA = 1,     
  65.         kBitC = 1,    kMaskC = 2,
  66.         kBitG    = 2,    kMaskG = 4,
  67.         kBitT    = 3,    kMaskT = 8,        
  68.         kBitExtra = 4, kMaskExtra = 16,
  69.         kMaskIndel= 16, //kMaskExtra,
  70.         kMaskU         = 8+16, kMaskRna = 8+16, // kMaskT + kMaskExtra, kMaskRna = kMaskU,
  71.         kMaskNucs = 1+2+4+8, //kMaskA + kMaskC + kMaskG + kMaskT,
  72.         kBit5 = 5,  kMask5 = 32,  //unused NucleicBits in byte
  73.         kBit6 = 6,    kMask6 = 64,
  74.         kBit7 = 7,    kMask7 = 128
  75.         };
  76.     enum {
  77.         kNameWidth    = 31,
  78.         kMaxSeqShow = 10,
  79.         kMaxSname    = 20
  80.         };
  81.  
  82.     DSequence();
  83.     virtual ~DSequence();
  84.  
  85.     static long     NucleicBits( char nuc);
  86.     static Boolean IsNucleicMatch( long xNucBits, long yNucBits);
  87.     static char     NucleicConsensus( long xNucBits, long yNucBits);
  88.     static void     NucleicComplement( Boolean isrna, char* fromSeq, char* toSeq, long len);
  89.     static char*     Nucleic23Protein( char* nucs, long nbases);
  90.     static const char*     Amino123( char amino1);
  91.     static char      Amino321( char* amino);
  92.  
  93.     virtual DObject* Clone(); // override 
  94.     virtual void CopyContents( DSequence* fromSeq);
  95.     
  96.     virtual char* Bases() const { return fBases; }
  97.     virtual char* Masks() const { return fMasks; }
  98.     virtual char* Name() const { return fName; }
  99.     virtual char* Info() const { return fInfo; }
  100.     virtual long     LengthF() const { return fLength; }
  101.     virtual short Kind() const { return fKind; }
  102.     virtual short Index() const { return fIndex; }
  103.     virtual char* KindStr() const;
  104.     virtual Boolean Changed() const { return fChanged; }
  105.     virtual unsigned long ModTime() const { return fModTime; }
  106.     virtual unsigned long Checksum() const { return fChecksum; }
  107.     virtual long Origin() const { return fOrigin; }
  108.     virtual Boolean IsAmino() { return (fKind == kAmino); }
  109.     virtual Boolean IsDeleted() { return fDeleted; }
  110.     virtual Boolean ShowORF() { return fShowORF; }
  111.     virtual Boolean ShowRE() { return fShowRE; }
  112.     virtual Boolean ShowTrace() { return fShowTrace; }
  113.     
  114.     virtual void SetBases( char*& theBases, Boolean duplicate = false);
  115.     virtual void UpdateBases( char* theBases, long theLength); // caller must know what he does  
  116.     virtual void SetMasks( char*& theMasks, Boolean duplicate = false);
  117.     virtual void FixMasks();
  118.     virtual void SetInfo( char* theInfo);
  119.     virtual void SetName( char* theName);
  120.     virtual void SetKind( short theKind);
  121.     virtual void SetIndex( short theIndex);
  122.     virtual void SetTime( unsigned long theTime);
  123.     virtual void SetOrigin( long theOrigin);
  124.     virtual void SetDeleted( Boolean turnon) { fDeleted= turnon; }
  125.     virtual void SetChanged( Boolean turnon) { fChanged= turnon; }
  126.     virtual void SetShowORF( short turnon);
  127.     virtual void SetShowRE( short turnon);
  128.     virtual void SetShowTrace( short turnon);
  129.  
  130.     virtual void SetSelection( long start, long nbases);
  131.     virtual void GetSelection( long& start, long& nbases);
  132.     virtual void ClearSelection();
  133.     virtual void InsertSpacers( long insertPoint, long insertCount, char spacer);
  134.     
  135.     virtual DSequence* CopyRange();
  136.     virtual DSequence* CutRange();
  137.     virtual DSequence* PasteBases( long insertPoint, char* fromBases, char* fromMasks);
  138.     virtual DSequence* Reverse();
  139.     virtual DSequence* Complement();
  140.     virtual DSequence* Dna2Rna( Boolean toRna);
  141.     virtual DSequence* ChangeCase( Boolean toUpper);
  142.     virtual DSequence* Translate(Boolean keepUnselected = true);
  143.     virtual DSequence* Slide( long slideDist);
  144.     virtual DSequence* Compress();
  145.     virtual DSequence* CompressFromMask(short masklevel);
  146.     virtual DSequence* LockIndels( Boolean doLock);
  147.     virtual DSequence* OnlyORF(char nonorf = '~');
  148.     virtual void SetORFmask(short masklevel, short frame);
  149.  
  150.     virtual long Search( char* target, Boolean backwards);
  151.     virtual long SearchAgain(); 
  152.     virtual void SearchORF( long& start, long& stop); 
  153.     virtual void NucleicSearch(char* source, char* target, SearchRec& aSearchRec);
  154.     virtual void ProteinSearch(char* source, char* target, SearchRec& aSearchRec);
  155.  
  156.     virtual Boolean IsConsensus();
  157.     virtual Boolean GoodChar(char& aChar); 
  158.     virtual void Reformat(short format);
  159.     virtual void Modified();  //set fModTime
  160.     virtual void UpdateFlds(); 
  161.     
  162.     virtual Boolean MasksOk() { return fMasksOk; }
  163.     virtual short MaskAt(long baseindex, short masklevel= 1);
  164.     virtual void  SetMaskAt(long baseindex, short masklevel= 1, short maskval= 1);
  165.     virtual void  FlipMaskAt(long baseindex, short masklevel= 1);
  166.     virtual void  ClearMaskAt(long baseindex, short masklevel= 1) 
  167.                                 { SetMaskAt(baseindex, masklevel, 0); }
  168.     virtual void  SetMask(short masklevel= 1, short maskval= 1); 
  169.     virtual void  FlipMask(short masklevel= 1); 
  170.     virtual void  ClearMask(short masklevel= 1) { SetMask(masklevel, 0); }
  171.     virtual Boolean IsMasked(unsigned char maskbyte, short masklevel);
  172.  
  173.     virtual void DoWrite( DFile* aFile, short format);  // revise for ostream
  174.     virtual void DoWriteSelection( DFile* aFile, short format); // revise for ostream
  175. };
  176.  
  177.  
  178. extern char*    gDefSeqName;
  179. extern short  gLinesPerSeqWritten;
  180.         
  181.  
  182. #endif
  183.